查看原文
其他

.NET 如何用一行代码将string[] 转成 int[] ?

DotNet 2021-12-16

The following article is from NET技术问答 Author Stackover

咨询区

abatishchev

我现在有一个数字型的 string 数组。

var arr = new string[] { "1""2""3""4" };  

但是我的 Foo(int[] arr) 方法参数需要真实的 int[] 格式,方法签名如下。

void Foo(int[] arr) { .. }  

我尝试用 Cast<int> 进行强转,但报错了。

Foo(arr.Cast<int>.ToArray()); 

然后我改造成如下方式。

var list = new List<int>(arr.Length);  
arr.ForEach(i => list.Add(Int32.Parse(i))); // maybe Convert.ToInt32() is better?  
Foo(list.ToArray());  

var list = new List<int>(arr.Length);  
arr.ForEach(i =>  
{  
   int j;  
   if (Int32.TryParse(i, out j)) // TryParse is faster, yeah  
   {  
      list.Add(j);  
   }  
 }  
 Foo(list.ToArray());  

虽然能解决问题,但我觉得这两种方式都太繁琐了,请问是否有更简单的方式来实现?

回答区

Ahmad Mageed

很简单,用 Array.ConvertAll 方法直接强转即可。

int[] myInts = Array.ConvertAll(arr, int.Parse);  

如果用 Linq 的话,你可以将 int.Parse 丢到 Select 扩展方法即可。

int[] myInts = arr.Select(int.Parse).ToArray();  

Ahmad Mageed

为了避免异常,建议用 .TryParse 而不是 .Parse,如果遇到不能转换的,还可以用 0 进行替代,参考如下代码。

static void Main(string[] args)  
{  
    string[] arr = { null" "" 1 "" 002 ""3.0" };  
    var a = Array.ConvertAll(arr, s => int.TryParse(s, out int i) ? i : 0);  
}  

点评区

没想到,一个简单的 string[]int[] 还有这么多方法,尤其是那个 Array.ConvertAll,太🐂了,从侧面说,小编对底层类库还是不够熟悉,学无止尽


- EOF -


推荐阅读  点击标题可跳转
.NET 医疗布草API程序 内存暴涨分析ASP.NET Core &amp; CAP 实现分布式事务C# 搞个跨平台的桌面NES游戏模拟器


看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存